package auto;

import org.apache.commons.io.FileUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.io.File;
import java.io.IOException;
import java.time.Duration;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: DELL
 * Date: 2023-04-06
 * Time: 7:31
 */

// 自动化是 selenium 脚本实现的
public class AutoDemo1 {
    EdgeDriver driver = new EdgeDriver();
    public void windowsApi() throws IOException, InterruptedException {
        driver.get("https://www.baidu.com");
        driver.findElement(By.cssSelector("#kw")).sendKeys("刘亦菲");
        driver.findElement(By.cssSelector("#su")).click();
        // 屏幕截屏, 并保存到文本文件中
        File srcPath = driver.getScreenshotAs(OutputType.FILE);
        // 创建文件名
        String fineName = "my.png"; // 当文件名已经存在时, 重复执行程序会覆盖文件  文件名可以加上时间戳 或者 UUID的方法命名 防止同名覆盖
        // 把 srcPath 中的内容 放到一个名为 fineName 的文件下, 如果没有该文件就创建一个
        FileUtils.copyFile(srcPath, new File(fineName));
        //  查找结果  通过观察 文件中的图片资源可以看到, 程序执行时, 浏览器页面还未渲染结束, 并未加载出元素, 此时获取不到页面元素内容
        Thread.sleep(3000); // 程序中等待页面渲染
        String s = driver.findElement(By.cssSelector("#\\31  > div > div > div > div > div.cos-row.row-text_Johh7.row_5y9Az > div > a > div > p > span > span")).getText();
        System.out.println(s);
        driver.quit();
    }

    // 隐式等待
    public void ImplicitWaiting () {
        // 添加隐式等待- 隐式等待会在指定时间内一直轮训判断元素是否存在, 如果不存在就等待设置的时间里不断进行轮询, 直到元素能够被找到
        // 每个语句只会在规定时间内轮询, 找不到就报错
        // 隐式等待作用域 driver 整个生命周期
        //  timeouts-超时等待  implicitlyWait-隐式等待
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));
        driver.get("https://www.baidu.com");
        driver.findElement(By.cssSelector("#kw")).sendKeys("刘亦菲");
        driver.findElement(By.cssSelector("#su")).click();
        String s = driver.findElement(By.cssSelector("#\\31  > div > div > div > div > div.cos-row.row-text_Johh7.row_5y9Az > div > a > div > p > span > span")).getText();
        System.out.println(s);
        driver.quit();
    }

    // 显示等待
    public void ExplicitWait() {
        driver.get("https://www.baidu.com");
        driver.findElement(By.cssSelector("#kw")).sendKeys("刘亦菲");
        driver.findElement(By.cssSelector("#su")).click();

        // 添加显示等待-在指定时间内, 若指定任务为完成, 则报错
        String s = new WebDriverWait(driver, Duration.ofSeconds(3)).
                until(driver -> driver.findElement(By.cssSelector
                        ("#\\31  > div > div > div > div > div.cos-row.row-text_Johh7.row_5y9Az > div > a > div > p > span > span"))
                        .getText());
        System.out.println(s);
        driver.quit();

    }





    public static void main(String[] args) throws IOException, InterruptedException {

        AutoDemo1 autoDemo1 = new AutoDemo1();
        autoDemo1.ExplicitWait();
    }
}
